Title of dissertation : IMPROVING PROGRAM TESTING AND UNDERSTANDING VIA SYMBOLIC EXECUTION
نویسندگان
چکیده
Title of dissertation: IMPROVING PROGRAM TESTING AND UNDERSTANDING VIA SYMBOLIC EXECUTION Kin Keung Ma, Doctor of Philosophy, 2011 Dissertation directed by: Professor Jeffrey S. Foster Professor Michael Hicks Department of Computer Science Symbolic execution is an automated technique for program testing that has recently become practical, thanks to advances in constraint solvers. Generally speaking, a symbolic executor interprets a program with symbolic inputs, systematically enumerating execution paths induced by the symbolic inputs and the program’s control flow. In this dissertation, I discuss the architecture and implementation of Otter, a symbolic execution framework for C programs, and work that uses Otter to solve two program analysis problems. Firstly, we use Otter to solve the line reachability problem—given a line target in a program, find inputs that drive the program to the line. We propose two new directed search strategies, one using a distance metric to guide symbolic execution towards the target, and another iteratively running symbolic execution from the start of the function containing the target, then jumping backward up the call chain to the start of the program. We compare variants of these strategies with several existing undirected strategies from the literature on a suite of 9 GNU Coreutils programs. We find that most directed strategies perform extremely well in many cases, although they sometimes fail badly. However, by combining the distance metric with a random-path strategy, we obtain a strategy that performs best on average over our benchmarks. We also generalize the line reachability problem to multiple line targets, and evaluate our new strategies under a different experimental setup. The result shows that many directed strategies start off slightly slower than undirected strategies, but they catch up and perform the best in the long run. Another use of Otter is to study how run-time configuration options affect the behavior of configurable software systems. We conjecture that, at certain levels of abstraction, software configuration spaces are much smaller than combinatorics might suggest. To evaluate our conjecture, we ran Otter on three configurable software systems with their concrete test suites, but making configuration options symbolic. Otter generated data of all execution paths of these systems, from which we discovered how the settings of configuration options affect line, basic block, edge, and condition coverage for our subjects under the test suites. Had we instead run the test suites under all configuration settings, it would have required many orders of magnitude more executions to generate the same data. IMPROVING PROGRAM TESTING AND UNDERSTANDING VIA SYMBOLIC EXECUTION
منابع مشابه
Program Analysis , Understanding , and Synthesis with Symbolic Execution
• Testing works ■ But, each test only explores one possible execution assert(f(3) == 5) ■ We hope test cases generalize, but no guarantees • Symbolic execution generalizes testing ■ Allows unknown symbolic variables in evaluation y = α; assert(f(y) == 2*y-1); ■ If execution path depends on unknown, conceptually fork symbolic executor int f(int x) { if (x > 0) then return 2*x 1; else return 10; }
متن کاملNATIONAL UNIVERSITY OF SINGAPORE School of Computing PH.D DEFENCE - PUBLIC SEMINAR
This thesis aims to address a number of program reasoning problems faced every day by programmers, using the technique of symbolic execution. Symbolic execution has the advantage of avoiding "infeasible" paths in the program (paths that cannot be exercised for any input), exploring which could provide spurious information about the program and mislead the programmer. However, as symbolic execut...
متن کاملUnderstanding and Improving Bloom Filter Configuration for Lazy Address-Set Disambiguation
Understanding and Improving Bloom Filter Configuration for Lazy Address-Set Disambiguation Mark C. Jeffrey Master of Applied Science Graduate Department of Electrical and Computer Engineering University of Toronto 2011 Many parallelization systems detect memory access conflicts across concurrent threads by disambiguating address-sets using bit-vector-based Bloom filters, which are efficient, bu...
متن کاملUnderstanding, Discovering and Leveraging a Software System's Effective Configuration Space
Title of dissertation: UNDERSTANDING, DISCOVERING AND LEVERAGING A SOFTWARE SYSTEM’S EFFECTIVE CONFIGURATION SPACE Charles Song Doctor of Philosophy 2011 Dissertation directed by: Professor Adam Porter Department of Computer Science Many modern software systems are highly configurable. While a high degree of configurability has many benefits, such as extensibility, reusability and portability, ...
متن کاملDemand-Driven Path-Sensitive Program Slicing
Program slicing is a technique to extract relevant parts of a program, and it is widely used in program debugging, parallelization, testing, reverse engineering, etc. This paper concerns static slicing and it follows the Weiser’s definition of slicing that consists of computing what statements of the program might affect the value of some particular variable at a specified program point. We arg...
متن کاملذخیره در منابع من
با ذخیره ی این منبع در منابع من، دسترسی به آن را برای استفاده های بعدی آسان تر کنید
عنوان ژورنال:
دوره شماره
صفحات -
تاریخ انتشار 2011